package com.pub.util;

public class PatternUtils 
{
	// http://www.ijavaee.cn/java/10-java-regular-expression-examples-you-should-know.html
	/* 	用户名正则表达式模式
	 * ^             # 行开始
  		[a-z0-9_-]    # 匹配列表中的字符，a-z,0–9,下划线，连字符
        {3,15}        # 长度至少3个字符，最大长度为15
		$             # 行结束
	 */
	private static final String userName = "^[a-z0-9_-]{3,15}$";
	
	/* 密码正则表达式模式
	 * 	(                        # 组开始
		    (?=.*\d)             # 必须包含一个数字 0-9
		    (?=.*[a-z])          # 必须包含一个小写字符
		    (?=.*[A-Z])          # 必须包含一个大写字符
		    (?=.*[@#$%])         # 必须包含一个列表中的特殊字符"@#$%"
		                .        # 检查所有字符串与前面的条件的匹配
		                 {6,20}  # 长度至少为6个字符，最大长度为20
		)                        # 组结束
	 */
	
	private static final String password = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})";
	
	/* 16进制颜色代码正则表达式模式
	 	^                     # 行开始
 		#                     #   必须包含一个"#"符号
  		(                     #   组#1开始
   			[A-Fa-f0-9]{6}    #     列表中的任意字符串,长度为6
   			|                 #     ..或者
   			[A-Fa-f0-9]{3}    #     列表中的任意字符串,长度为3
  		)                     #   组#1结束
		$                     # 行结束
	 */
	private static final String hexColor = "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$";
	
	
	/* Email 正则表达式模式
	 * 	^                            # 行开始
		  [_A-Za-z0-9-]+             #   必须以中括号中的字符为起始字符[],必须包含一个或多个(+)
		  (                          #   组#1开始
		    \\.[_A-Za-z0-9-]+        #     接下来是一个点"."和中括号内的字符[],必须包含一个或者多个(+)
		  )*                         #   组#1结束, 这个组是可选的(*)
		    @                        #     必须包含一个"@"符号
		     [A-Za-z0-9]+            #       接下来是中括号内的字符[],必须包含一个或者多个(+)
		      (                      #         组 #2开始 – 一级TLD检查
		       \\.[A-Za-z0-9]+       #           接下来是一个点"."和中括号内的字符[],必须包含一个或者多个(+)
		      )*                     #         组#2结束,这个组是可选的(*)
		      (                      #         组#3开始 – 二级TLD检查
		       \\.[A-Za-z]{2,}       #           接下来是一个点"."和中括号内的字符[], 最小长度为2
		      )                      #         组#3结束
		$                            # 行结束
	 */
	private static final String email = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
	
	/* 图像文件扩展名正则表达式模式
	 	(                         # 组#1开始
		 [^\s]+                   #   必须包含一个或更多的任意字符(除了空格)
		       (                  #     组#2开始
		        \.                #       接下来是一个点"."
		         (?i)             #       忽略后边字符的大小写检查
		             (            #         组#3开始
		              jpg         #           包含字符"jpg"
		              |           #           ..或者
		              png         #           包含字符"png"
		              |           #           .. 或者
		              gif         #           包含字符"gif"
		              |           #           .. 或者
		              bmp         #           包含字符"bmp"
		             )            #         组#3结束
		       )                  #     组#2结束
		 $                        #   字符串的结束
		)                         # 组#1结束
	 */
	private static final String imageExtands = "([^\\s]+(\\.(?i)(jpg|png|gif|bmp))$)";
	
	/* IP地址正则表达式模式
	 	^                  # 行开始
		 (                 #   组#1开始
		  [01]?\\d\\d?     #     可以是1到2个数字. 如果出现3个数字, 必须以0或者1开始
		                   #     例如 ([0-9], [0-9][0-9],[0-1][0-9][0-9])
		    |              #     ...或者
		  2[0-4]\\d        #     以2开始, 紧跟着是0-4，并且以任意数字结尾(2[0-4][0-9])
		   |               #     ...或者
		  25[0-5]          #     以2开始, 紧跟着是5，并且以0-5结尾 (25[0-5])
		 )                 #   组#1结束
		  \.               #   接下来是点"."
		....               #   重复3次 (3x)
		$                  # 行结束
	 */
	private static final String ip = "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
	
	/* 12-小时制时间正则表达式模式
	 	(                                  # 组#1开始
		 1[012]                            #   以10, 11, 12开始
		 |                                 #   或者
		 [1-9]                             #   以1,2,...9开始
		)                                  # 组#1结束
		 :                                 #   接下来是一个冒号 (:)
		  [0-5][0-9]                       #     接下来是0..5和0..9,意思是00到59
		            (\\s)?                 #       接下来是一个空格(可选)
		                  (?i)             #         下面的检查不区分大小写
		                      (am|pm)      #           接下来是AM或者PM
	 */
	private static final String time12 = "(1[012]|[1-9]):[0-5][0-9](\\s)?(?i)(am|pm)";
	
	/* 24小时制时间正则表达式模式
	 	(                                  # 组#1开始
		 [01]?[0-9]                        #   以0-9,1-9,00-09,10-19开始
		 |                                 #   或者
		 2[0-3]                            #   以20-23开始
		)                                  # 组#1结束
		 :                                 #   接下来是一个冒号(:)
		  [0-5][0-9]                       #     接下来是0..5和0..9,意思是00到59
	 */
	private static final String time24 = "([01]?[0-9]|2[0-3]):[0-5][0-9]";
	
	/* 日期格式 (dd/mm/yyyy) 正则表达式模式
	 * 	(                          # 组#1开始
		 0?[1-9]                   #   01-09或者1-9
		 |                         #   ..或者
		 [12][0-9]                 #   10-19或者20-29
		 |                         #   ..或者
		 3[01]                     #   30, 31
		)                          # 组#1结束
		  /                        #   接下来是一个"/"
		   (                       #     组#2开始
		    0?[1-9]                #       01-09或者1-9
		    |                      #       ..或者
		    1[012]                 #       10,11,12
		    )                      #     组#2结束
		     /                     #       接下来是一个"/"
		      (                    #         组#3开始
		       (19|20)\\d\\d       #           19[0-9][0-9]或者20[0-9][0-9]
		      )                    #         组#3结束
	 */
	private static final String date = "(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d)";
	
	/* HTML标签正则表达式模式
	 * 	<                # 以"<"标签开始
		 (               #   组#1开始
		  "[^"]*"        #     只允许两个双引号成对出现-"string"
		  |              #     ..或者
		  '[^']*'        #     只允许两个单引号成对出现- 'string'
		  |              #     ..或者
		  [^'">]         #     不能出现单独的双引号、单引号和">"
		 )               #   组#1结束
		 *               #   0次或多次
		>                # 以结束标签">"结束
	 */
	private static final String HTMLtag = "<(\"[^\"]*\"|'[^']*'|[^'\">])*>";
	
	/* HTML中的A标签正则表达式模式
	 * 	(              # 组#1开始
		 ?i            #   所有的检查区分大小写
		)              # 组#1结束
		<a             # 以"<a"开始
		  (            #   组#2开始
		   [^>]+       #     除了(">")之外的任意字符,至少一个字符
		  )            #   组#2结束
		  >            #     接下来是">"
		   (.+?)       #       匹配所有
		        </a>   #         以"</a>结束
	 */
	private static final String HTMLAtag = "(?i)<a([^>]+)>(.+?)</a>";
	
	/* 提取HTML链接正则表达式模式
	 * 	\s*                          # 可以以空格开始
		  (?i)                       #   所有的检查是区分大小写的
		     href                    #     接下来是一个"href"字
		        \s*=\s*              #       等号两边都允许空格,
		              (              #         组#1开始
		               "([^"]*")     #           只允许2个双引号成对出现 - "string"
		               |             #           ..或者
		               '[^']*'       #           只允许2个单引号成对出现 - 'string'
		               |             #           ..或者
		               ([^'">]+)     #           或者不允许出现单独的单引号、双引号和">"
		               )             #         组#1结束
	 */
	private static final String HTMLgetLink = "\\s*(?i)href\\s*=\\s*(\"([^\"]*\")|'[^']*'|([^'\">\\s]+));";
}
